package test;

import utils.crud_lianbiao;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/*
     题目23. 合并K个升序链表
给你一个链表数组，每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中，返回合并后的链表。
数据
输入：lists = [[1,4,5],[1,3,4],[2,6]]
输出：[1,1,2,3,4,4,5,6]
解释：链表数组如下：
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
1、优先级队列(小顶堆)  复杂度为O(nlog(k))
2、两两递归逐一比较  复杂度为O（kn）
3、使用分治算法实现复杂度为O（nlog(k)）
 */
public class letcode23_hebingklianbiao {
    public static void main(String[] args) {
        int a[]={1,3,4};
        int b[]={2,4,7};
        int c[]={1,5,6};
        int d[]={4,5,6,7};
        crud_lianbiao c1=new crud_lianbiao();
        List<crud_lianbiao.ListNode> listNodes=new ArrayList<>();
        crud_lianbiao.ListNode l=c1.initLists(a);
        crud_lianbiao.ListNode l1=c1.initLists(b);
        crud_lianbiao.ListNode l2=c1.initLists(c);
        crud_lianbiao.ListNode l3=c1.initLists(d);
        listNodes.add(l);
        listNodes.add(l1);
        listNodes.add(l2);
        listNodes.add(l3);
        /*crud_lianbiao.ListNode listNode=c1.mergeKList(listNodes);
        c1.visit(listNode);*/ //调用最小堆排列算法
        crud_lianbiao.ListNode list=c1.fenZhiMerge(listNodes);
        c1.visit(list);

    }
}
